package com.story.rpc.config;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class RpcServiceConfig {

    private String version="";
    private String group="";
    private Object service;    // 实现类
    public RpcServiceConfig(Object service){
        this.service = service;
    }

    public List<String> rpcServiceNames(){
        return interfaceNames().stream()
                .map(interfaceName -> interfaceName+getVersion()+getGroup())
                .collect(Collectors.toList());
    }

    private List<String> interfaceNames(){
        /**
         * service.getClass() 是service对象的实际运行类
         * service.getClass().getInterfaces() 从service对象中获取它所实现的所有接口
         * map 是流的一个中间操作，它会对流中每个元素应用一个函数 这里用的是Class::getCanonicalName 将接口的全限定名转换为字符串
         * collect 是流的终止操作，它会将流中的元素收集到一个集合中
         */
        return Arrays.stream(service.getClass().getInterfaces())
                .map(Class::getCanonicalName)
                .collect(Collectors.toList());
    }
}
